In modern computer design resources provided in a computer system are often shared among a plurality of operating devices for efficient performance. A shared resource can comprise, e.g., a system bus which is used for transferring data between the plurality of operating devices, such as processors and I/O controllers, which comprise part of the computer system.
Whenever a common resource is provided in a computer system, fairness becomes a design issue. Fairness concerns the fair allocation of the services provided by the resource among the several devices requesting access to the resource. It is typically a design criteria in the implementation of a resource that no one processing device so dominate the use of the resource that other processing devices of the computer system are unable to receive adequate service from the resource.
In modern computer systems, arbiters are frequently used to ensure the fair allocation of access by requesting devices, e.g. the processors, to a shared resource such as the system bus. Two types of known arbiters are priority based and round robin arbiters.
In a known straight priority scheme, the requester with the highest priority gets access to the shared device. In such systems, devices with lower priority than the requesting device are denied access to the resource until there are no higher priority requests pending. While such a system permits the highest priority devices to have their requests serviced, it presents the possibility that the lower priority devices will be locked out of access to the shared resource completely for significant periods of time.
In the known round robin arbitration scheme, all the requestors are typically at the same priority level with the shared resource being accessed in a round robin manner. In such a system, all requestors are given access to the shared resource in sequence. While this approach insures that no particular device will be unfairly denied access to the shared resource, it fails to provide for greater amounts of access to the shared resource by devices that should be assigned a higher priority than other requesting devices, for improved overall operating efficiency of the computer system.
In addition to the known fixed straight priority scheme and the fixed round robin arbitration scheme, some known arbitrators provide for a limited amount of programmability with regard to the amount of access that any one requestor may have to the shared resource in a given time period. However, in such known systems, once a device has used up its allocated share of access to the shared resource, it must wait for a new time period for resource allocation to begin before it can re-access the shared resource.
Furthermore, in the above systems, the allocation time periods are fixed in terms of a preselected number of clock cycles rather than in terms of a number of bus windows. With the allocation period being fixed in terms of clock cycles instead of bus windows, the ability to programmably allocate access to the system bus is somewhat limited since the total number of clock cycles per window always remains fixed.
Such a system, which limits total access by a requestor to a resource, becomes wasteful when there are no other devices requesting access to the resource, and a particular requestor which could take advantage of the resource's potential is denied access because it has already used up its permitted share of access for the particular allocation time period. In such systems, as noted above, the requestor which has used up its share of allocated access must wait until a new time period begins before being permitted access to the shared resource again.
Thus, presently known arbitration schemes are limited in their ability to arbitrate access to a common shared resource in an efficient and flexible manner.